package com.huaweisoft.basemoudle.utils;



import android.app.AlarmManager;
import android.content.Context;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

/**
 * Created by baiaj on 2016-05-24.
 * 日期帮助类
 */
public class DateUtil {
    /**
     * 日期格式 yyyy-MM-dd
     */
    public static String format1 = "yyyy-MM-dd";
    /**
     * 日期格式 yyyy-MM-dd H:m:s
     */
    public static String format2 = "yyyy-MM-dd H:m:s";
    /**
     * 日期格式 yyyy-MM-dd HH:mm:ss
     */
    public static String format3 = "yyyy-MM-dd HH:mm:ss";
    /**
     * 日期格式 yyyyMMddHHmmss
     */
    public static String format4 = "yyyyMMddHHmmss";
    /**
     * 日期格式 yyyy-MM-dd HH:mm
     */
    public static String format5 = "yyyy-MM-dd HH:mm";
    /**
     * 日期格式 MM-dd HH:mm
     */
    public static String format6 = "MM-dd HH:mm";
    /**
     * 日期格式 yyyy
     */
    public static String format7 = "yyyy";

    /**
     * 日期格式 yyyy-MM-dd HH:mm:ss:SSS
     */
    public static String format8 = "yyyy-MM-dd HH:mm:ss.SSS";

    /**
     * 获取当前日期的字符串格式
     *
     * @param format
     * @return
     */
    public static String getNowDateFormateString(SimpleDateFormat format) {
        return format.format(new Date());
    }

    /**
     * 获取当前日期
     *
     * @return
     */
    public static Date getNowDate() {
        return new Date();
    }

    // formatType格式为yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒
    // data Date类型的时间
    public static String dateToString(Date data, String formatType) {
        return new SimpleDateFormat(formatType).format(data);
    }

    // currentTime要转换的long类型的时间
    // formatType要转换的string类型的时间格式
    public static String longToString(long currentTime, String formatType)
            throws ParseException {
        Date date = longToDate(currentTime, formatType); // long类型转成Date类型
        String strTime = dateToString(date, formatType); // date类型转成String
        return strTime;
    }

    // strTime要转换的string类型的时间，formatType要转换的格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日
    // HH时mm分ss秒，
    // strTime的时间格式必须要与formatType的时间格式相同
    public static Date stringToDate(String strTime, String formatType)
            throws ParseException {
        SimpleDateFormat formatter = new SimpleDateFormat(formatType);
        Date date = null;
        date = formatter.parse(strTime);
        return date;
    }

    // currentTime要转换的long类型的时间
    // formatType要转换的时间格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒
    public static Date longToDate(long currentTime, String formatType)
            throws ParseException {
        Date dateOld = new Date(currentTime); // 根据long类型的毫秒数生命一个date类型的时间
        String sDateTime = dateToString(dateOld, formatType); // 把date类型的时间转换为string
        Date date = stringToDate(sDateTime, formatType); // 把String类型转换为Date类型
        return date;
    }

    // strTime要转换的String类型的时间
    // formatType时间格式
    // strTime的时间格式和formatType的时间格式必须相同
    public static long stringToLong(String strTime, String formatType)
            throws ParseException {
        Date date = stringToDate(strTime, formatType); // String类型转成date类型
        if (date == null) {
            return 0;
        } else {
            long currentTime = dateToLong(date); // date类型转成long类型
            return currentTime;
        }
    }

    // date要转换的date类型的时间
    public static long dateToLong(Date date) {
        return date.getTime();
    }

    // 切割时间 针对format4 yyyyMMddHHmmss
    public static String[] spiltTime(String time){
        if (time.length() == 14){
            String[] times = new String[6];
            times[0] = time.substring(0,4);
            times[1] = time.substring(4,6);
            times[2] = time.substring(6,8);
            times[3] = time.substring(8,10);
            times[4] = time.substring(10,12);
            times[5] = time.substring(12,14);
            return times;
        }else {
            throw new RuntimeException("format error");
        }
    }

    // 设置系统时间时间是否自动获取
    public static void setAutoDateTime(Context context, int checked){
        android.provider.Settings.Global.putInt(context.getContentResolver(),
                android.provider.Settings.Global.AUTO_TIME, checked);
    }

    // 设置系统时区是否自动获取
    public static void setAutoTimeZone(Context context, int checked){
        android.provider.Settings.Global.putInt(context.getContentResolver(),
                android.provider.Settings.Global.AUTO_TIME_ZONE, checked);
    }

    // 设置系统日期
    public static void setSysDate(Context context, int year, int month, int day){
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, day);

        long when = c.getTimeInMillis();

        if(when / 1000 < Integer.MAX_VALUE){
            ((AlarmManager)context.getSystemService(Context.ALARM_SERVICE)).setTime(when);
        }
    }

    // 设置系统时间
    public static void setSysTime(Context context, int hour,int minute,int second){
        Calendar c = Calendar.getInstance();
        c.set(Calendar.HOUR_OF_DAY, hour);
        c.set(Calendar.MINUTE, minute);
        c.set(Calendar.SECOND, second);
        c.set(Calendar.MILLISECOND, 0);

        long when = c.getTimeInMillis();

        if(when / 1000 < Integer.MAX_VALUE){
            ((AlarmManager)context.getSystemService(Context.ALARM_SERVICE)).setTime(when);
        }
    }

    // 设置系统时区
    public static void setTimeZone(String timeZone){
        final Calendar now = Calendar.getInstance();
        TimeZone tz = TimeZone.getTimeZone(timeZone);
        now.setTimeZone(tz);
    }

}
